package first;

import first.service.SomeService;
import first.service.impl.SomeServiceImpl;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author 飞哥
 * @version V1.0
 * @package first
 * @date 2021/7/20 10:05
 */
public class SpringTest01 {
    @Test
    public void test01() {
        //不用spring创建对象
        SomeService someService = new SomeServiceImpl();
        someService.doSome();
    }

    @Test
    /**
     * spring创建对象的时间：在创建spring容器时，会创建配置文件中所有的对象
     * spring创建对象默认调用无参数构造方法
     */
    public void test02() {
        //使用spring容器创建对象
        //1.指定spring配置文件的名称（找路径）
        String config = "beans.xml";
        //2.创建表示spring容器的对象，ApplicationContext(表示spring容器)
        //ClassPathXmlApplicationContext：表示从类路径加载配置文件的路径
        //FileSystemXmlApplicationContext：表示从本地磁盘路径加载配置文件的路径
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(config);

        //3.从容器中获取某个对象
        //getBean("配置文件中bean的id值");
        SomeService someService = (SomeService) applicationContext.getBean("someService");

        //4.使用对象
        someService.doSome();
    }

    @Test
    public void test03() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
        SomeService someService = (SomeService) ac.getBean("someService");
        someService.doSome();
    }

    /**
     * 获取spring容器中java对象的信息
     */
    @Test
    public void test04() {
        String config = "beans.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(config);
        //使用spring提供的方法，获取容器中对象定义的数量
        int nums = ac.getBeanDefinitionCount();
        System.out.println("容器中定义的对象数量：" + nums);
        //容器中每个定义的对象的名称
        String[] names = ac.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println("容器中每个定义的对象的名称：" + name);
        }
    }

    @Test
    public void test05() {
        ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
        Date now = (Date) ac.getBean("myDate");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
        String time = sdf.format(now);
        System.out.println("北京时间：" + time);
    }

    @Test
    public void test06(){
        ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
        System.out.println(ac);
    }
}
